/**
 * Copyright(c) 2013 Jade Techonologies Co., Ltd.
 *
 * History:
 *   13-4-23 下午10:11 Created by dwzhang
 */
package com.jade.framework.base.criterion.sql;

import java.util.List;

import com.jade.framework.base.criterion.Constants;
import com.jade.framework.base.criterion.CriterionInterpreter;
import com.jade.framework.base.criterion.Group;

/**
 * Group By Interpreter.
 *
 * @author dwzhang
 * @version 1.0 13-4-23 下午10:11
 */
public class GroupInterpreter implements CriterionInterpreter<SqlContext, Group>
{
    /**
     * 对表达式进行解析，形成可以用于实际查询的上下文。
     *
     * @param context 解析上下文。
     * @param group   需要解析的对象。
     */
    public void interprete(SqlContext context, Group group)
    {
        context.append(Constants.BLANK);
        context.append(Constants.GROUP_BY);
        context.append(Constants.BLANK);

        List<String> entityNames = group.getEntityNames();
        List<String> propNames = group.getPropNames();

        for (int i = 0; i < entityNames.size(); i++) {
            String entityName = entityNames.get(i);
            String propName = propNames.get(i);
            if (i > 0) {
                context.append(Constants.COMMA);
                context.append(Constants.BLANK);
            }
            context.append(Group.getFullName(entityName, propName));
        }
    }
}
